package com.aaa.stream.demo02;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test;

import java.util.ArrayList;

/**
 * @author C-Q
 * @version 1.1.0
 * @Description: TODO
 * @date 2022/11/5
 */
public class Test01 {
    @Test
    public void Test3() {
        //假设有个Person类和一个Person列表，现在有两个需求:
        //1.找到年龄大于18岁的人并输出；
        //2.找出所有中国人的数量
        ArrayList<Person> people = new ArrayList<>();
        people.add(new Person("上官雪", 18, "中国", 'A'));
        people.add(new Person("慕容复", 14, "法国", 'B'));
        people.add(new Person("逍遥散", 57, "伊拉克", 'B'));
        people.add(new Person("宇文都", 36, "比利时", 'B'));
        people.add(new Person("易烊玺", 45, "中国", 'A'));
        people.add(new Person("无为治", 15, "荷兰", 'A'));

        /*1.找到年龄大于18岁的人并输出
        filter 它就是中间操作的方法，如果没有执行终止操作方法那么中间操作都不会执行，执行了终止操作方法时才会执行中间操作的方法*/
        /*people.stream()
                .filter(item->{return item.getAge()>18;})
                .forEach(System.out::println);*/
        people.stream().filter(item->item.getAge()>20).forEach(System.out::println);


        /*forEach属于终止操作方法
        2.找出所有中国人的数量*/
        //long count = people.stream().filter(item -> item.getCountry().equals("中国")).count();
        //System.out.println("count = " + count);

        //3.map映射操作--名称
        people.stream().map(item->item.getName()).forEach(System.out::println);

        //sort排序操作--年龄
        people.stream().sorted((o1, o2) ->Integer.compare(o1.getAge(),o2.getAge())).forEach(System.out::println);

        //提取和组合
        //流也可以进行合并、去重、限制、跳过等操作


    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Person{
    private String name;
    private Integer age;
    private String country;
    private char sex;
}